﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Configuration;
using Insifo.BE;

namespace Insifo.DL.Gen
{
    public class DLOrigenDatos
    {
        #region  Members


        /// <summary>
        /// Método obtiene los Origenes de Datos Activos
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar()
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_OrigenDatos_Listar");
            dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
            try
            {                
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {                
                //if (dbCmd.Connection.State == ConnectionState.Open)
                    //dbCmd.Connection.Close();
                dbCmd.Dispose();                
            }
            return ds;
        }


        /// <summary>
        /// Método que Verifica las conexiona de cada origen
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public List<BEEntidadParam> VerificarConexiones()
        {
            List<BEEntidadParam> lst = new List<BEEntidadParam>();

            DataRow[] drs = Listar().Tables[0].Select("FlagActivar = 'S'"); //Solo extrae activas
            string strCadenaConexion = string.Empty;
            StringBuilder sb = new StringBuilder();
            foreach (DataRow dr in drs)
            {
                string strTipoProveedor = DBValue.Get<string>(dr, "TipoProveedor");
                string strMensaje = string.Empty;
                switch (strTipoProveedor)
                {
                    case "SQL":
                        strCadenaConexion = sb.AppendFormat(Constantes.ConnectionStringSQL, DBValue.Get<string>(dr, "Servidor"), DBValue.Get<string>(dr, "Basedatos"), DBValue.Get<string>(dr, "Login"), DBValue.Get<string>(dr, "Password")).ToString();
                        ConnectionSql cnsql = new ConnectionSql();
                        if (!cnsql.ExisteConectividad(strCadenaConexion,out strMensaje))
                        {
                            BEEntidadParam be = new BEEntidadParam();
                            be.Codigo = DBValue.Get<string>(dr, "CodigoOrigen");
                            be.Mensaje = strMensaje;
                            lst.Add(be);
                        }
                        break;
                    case "ORACLE":
                        strCadenaConexion = sb.AppendFormat(Constantes.ConnectionStringOracle, DBValue.Get<string>(dr, "Servidor"), DBValue.Get<string>(dr, "Login"), DBValue.Get<string>(dr, "Password")).ToString();
                        break;
                    default:
                        strCadenaConexion = DBValue.Get<string>(dr, "DBParam");
                        break;
                }
            }

            return lst;
        }


        


        #endregion  Members
    }
}
